# 1 多态: 同样一个函数在不同的场景下有不同的状态  Animal Dog Cat
# 2 多态应用场景: make_noise相当于搭建一个舞台, 让对象唱戏
# 3 传入子类对象会执行子类的api函数, 传入父类对象会传入父类的api函数

class Animal(object):
    def speak(self):
        print("animal 嗯嗯 ")
        pass


class Dog(Animal):
    def speak(self):
        print('汪汪汪')


class Cat(Animal):
    def speak(self):
        print('喵喵喵')


# def make_noise(animal):
def make_noise(animal:Animal):
    animal.speak()

if __name__ == '__main__':
    mydog = Dog()
    mycat = Cat()
    animal =  Animal()

    make_noise(mydog)
    print('-----------------')
    make_noise(mycat)
    print('-----------------')
    make_noise(animal)
    pass
